#include "forgotdialog.h"
#include "ui_forgotdialog.h"

#include "changepassword.h"


#include <QFile>
#include <QMessageBox>
#include <QDialog>




ForgotDialog::ForgotDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::ForgotDialog)
{
    ui->setupUi(this);

    setWindowTitle("找回密码");
    ui->UsernameEdit->setPlaceholderText("请输入账号");
    ui->SecurityEdit->setPlaceholderText("请输入密保");

    ui->NextStep->setEnabled(false);

}

ForgotDialog::~ForgotDialog()
{
    delete ui;
}



// void ForgotDialog::on_NextStep_clicked()
// {

//     // 1. 获取用户输入
//     QString username = ui->UsernameEdit->text().trimmed(); // 去除首尾空格
//     QString securityAnswer = ui->SecurityEdit->text().trimmed();

//     if (username.isEmpty() || username == "请输入账号")
//     {
//         QMessageBox::warning(this, "输入错误", "请输入有效的账号！");
//         return;
//     }
//     if (securityAnswer.isEmpty() || securityAnswer == "请输入密保")
//     {
//         QMessageBox::warning(this, "输入错误", "请输入密保问题的答案！");
//         return;
//     }


//     QFile file("users.txt");


//     if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
//     {
//         QMessageBox::critical(this, "文件错误", "无法打开用户数据文件！\n请检查 users.txt 是否存在。");
//         qDebug() << "无法打开文件:"<< file.errorString();
//         return;
//     }

//     QTextStream in(&file);
//     bool userFound = false;
//     QString storedPassword;

//     while(!in.atEnd())
//     {
//         QString line = in.readLine().trimmed();
//         if (line.isEmpty()) continue; // 跳过空行

//         // 使用 "||" 作为分隔符
//         QStringList parts = line.split("||", Qt::SkipEmptyParts); // Qt::SkipEmptyParts 可以跳过因多个||产生的空字符串
//         // parts 应该有 3 个元素: [昵称, 密码, 密保]
//         if (parts.size() == 3)
//         {
//             QString fileUsername = parts[0].trimmed(); // 昵称
//             QString filePassword = parts[1].trimmed(); // 密码
//             QString fileSecurityQuestion = parts[2].trimmed(); // 密保问题（注意：这里存的是问题，不是答案！）
//             QString fileSecurityAnswer = parts[2].trimmed();

//             if (fileUsername == username)
//             {
//                 userFound = true;
//                 // 验证密保答案（不区分大小写）
//                 if(fileSecurityQuestion.toLower() == securityAnswer.toLower())
//                 {
//                     storedPassword = filePassword;
//                     break; // 找到且验证成功
//                 }
//                 else
//                 {
//                     break; // 用户名存在但答案错误
//                 }
//             }
//         }
//     }
//     file.close();

//     if (userFound)
//     {

//         // 验证通过，跳转到修改密码界面

//         ChangePassword dialog(this);

//         //dialog.setUsername(username);  // 可选：传用户名过去
//         int result = dialog.exec();
//         if (result == QDialog::Accepted)
//         {
//             QMessageBox::information(this, "修改成功", "密码已成功修改！");

//             accept();  // 关闭忘记密码窗口
//         }
//     }
//     else
//     {
//         QMessageBox::warning(this, "验证失败", "用户名或密保不正确！");
//     }



// }


// void ForgotDialog::on_NextStep_clicked()
// {
//     // 1. 获取用户输入
//     QString username = ui->UsernameEdit->text().trimmed();
//     QString securityAnswer = ui->SecurityEdit->text().trimmed();

//     if (username.isEmpty() || username == "请输入账号") {
//         QMessageBox::warning(this, "输入错误", "请输入有效的账号！");
//         return;
//     }
//     if (securityAnswer.isEmpty() || securityAnswer == "请输入密保") {
//         QMessageBox::warning(this, "输入错误", "请输入密保问题的答案！");
//         return;
//     }

//     QFile file("users.txt");
//     if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
//         QMessageBox::critical(this, "文件错误", "无法打开用户数据文件！\n请检查 users.txt 是否存在。");
//         qDebug() << "无法打开文件:" << file.errorString();
//         return;
//     }

//     QTextStream in(&file);
//     bool userFound = false;
//     bool securityCorrect = false;
//     QString storedPassword;

//     while (!in.atEnd()) {
//         QString line = in.readLine().trimmed();
//         if (line.isEmpty()) continue;

//         QStringList parts = line.split("||", Qt::SkipEmptyParts);
//         if (parts.size() == 3) {
//             QString fileUsername = parts[0].trimmed();
//             QString filePassword = parts[1].trimmed();
//             QString fileSecurityAnswer = parts[2].trimmed(); // 你存的是“答案”，所以这是正确答案

//             if (fileUsername == username) {
//                 userFound = true;
//                 // 比较密保答案（不区分大小写）
//                 if (fileSecurityAnswer.toLower() == securityAnswer.toLower()) {
//                     securityCorrect = true;
//                     storedPassword = filePassword;
//                     break;
//                 }
//                 break; // 用户名存在，但密保错，直接退出循环
//             }
//         }
//     }
//     file.close();

//     // 2. 分情况处理
//     if (!userFound) {
//         QMessageBox::warning(this, "验证失败", "该账号不存在，请重新输入！");
//     }
//     else if (userFound && !securityCorrect) {
//         // ✅ 用户存在但密保错误
//         QMessageBox::warning(this, "密保错误", "密保答案错误，请重新输入！");
//         // 清空密保输入框，方便用户重新输入
//         ui->SecurityEdit->clear();
//         ui->SecurityEdit->setFocus();
//     }
//     else if (securityCorrect) {
//         // ✅ 验证通过，跳转到修改密码界面
//         ChangePassword dialog(this);
//         int result = dialog.exec();

//         if (result == QDialog::Accepted) {
//             QMessageBox::information(this, "修改成功", "密码已成功修改！");
//             accept(); // 关闭忘记密码窗口
//         }
//         // 如果用户取消修改密码，不关闭窗口，可以重新操作
//     }
// }


void ForgotDialog::on_NextStep_clicked()
{
    // 获取输入
    QString username = ui->UsernameEdit->text().trimmed();
    QString securityAnswer = ui->SecurityEdit->text().trimmed();

    // 输入合法性检查
    if (username.isEmpty() || username == "请输入账号")
    {
        QMessageBox::warning(this, "输入错误", "请输入有效的账号！");
        return; // 阻止下一步
    }
    if (securityAnswer.isEmpty() || securityAnswer == "请输入密保")
    {
        QMessageBox::warning(this, "输入错误", "请输入密保问题的答案！");
        return; //  阻止下一步
    }

    // 读取 users.txt 验证
    QFile file("users.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QMessageBox::critical(this, "文件错误", "无法打开用户数据文件！");
        qDebug() << "无法打开文件:" << file.errorString();
        return; //  阻止下一步
    }

    QTextStream in(&file);
    bool userFound = false;
    bool securityCorrect = false;

    while (!in.atEnd())
    {
        QString line = in.readLine().trimmed();
        if (line.isEmpty()) continue;

        QStringList parts = line.split("||", Qt::SkipEmptyParts);
        if (parts.size() == 3)
        {
            QString fileUsername = parts[0].trimmed();
            QString fileSecurityAnswer = parts[2].trimmed();

            if (fileUsername == username)
            {
                userFound = true;
                if (fileSecurityAnswer.toLower() == securityAnswer.toLower())
                {
                    securityCorrect = true;
                }
                break; // 找到用户就退出
            }
        }
    }
    file.close();

    // 分情况处理 —— 只有全部正确才进入下一步
    if (!userFound)
    {
        QMessageBox::warning(this, "验证失败", "该账号不存在，请重新输入！");
        ui->UsernameEdit->clear();
        ui->SecurityEdit->clear();
        ui->UsernameEdit->setFocus();
    }
    else if (!securityCorrect)
    {
        QMessageBox::warning(this, "密保错误", "密保答案错误，请重新输入！");
        ui->SecurityEdit->clear();
        ui->SecurityEdit->setFocus();
    }
    else
    {
        //  全部验证通过，进入下一步
        ChangePassword dialog(this);
        dialog.setUsername(username); // 可选：传用户名
        int result = dialog.exec();

        if (result == QDialog::Accepted)
        {
            //QMessageBox::information(this, "修改成功", "密码已成功修改！");
            accept(); // 关闭当前窗口
        }
        // 如果用户取消修改密码，不关闭，可重新操作
    }
}


void ForgotDialog::on_UsernameEdit_textChanged(const QString &arg1)
{
    checkInputsFilled();
}


void ForgotDialog::on_SecurityEdit_textChanged(const QString &arg1)
{
    checkInputsFilled();
}

void ForgotDialog::checkInputsFilled()
{
    // 只有当两个输入框都不为空且不是占位符时，才启用按钮
    bool usernameOk = !ui->UsernameEdit->text().trimmed().isEmpty() && ui->UsernameEdit->text().trimmed() != "请输入账号";
    bool securityOk = !ui->SecurityEdit->text().trimmed().isEmpty() && ui->SecurityEdit->text().trimmed() != "请输入密保";

    ui->NextStep->setEnabled(usernameOk && securityOk);

}


void ForgotDialog::on_BeforeStep_clicked()
{
    reject();
}

